2023/12/235409字符
fs 文件操作
readFile 读取
const fs = require('fs');
const path = require('path');
const filename = path.resolve(__dirname, './data/pack.json');
// 1 同步读取文件
fs.readFile(filename, 'utf-8', (err, content) => {
console.log(content);
});
// 2 异步读取文件
async function test () {
const content = await fs.promises.readFile(filename, 'utf-8'); // ES6 之后为兼容之前的版本新增的 promises 方法
console.log(content);
}
test();
writeFile 写入
const fs = require('fs');
const path = require('path');
const filename = path.resolve(__dirname, './data/1.txt');
async function test () {
await fs.promises.writeFile(filename, 'hello');
console.log('写入成功');
}
test();
文件复制
const fs = require('fs');
const path = require('path');
/**
* 文件复制函数
* @param {String} src1 被 copy 的文件路径
* @param {String} src2 copy 的文件路径
*/
async function fileCopy (src1, src2) {
const fromFilename = path.resolve(__dirname, src1);
const buffer = await fs.promises.readFile(fromFilename);
const toFilename = path.resolve(__dirname, src2);
await fs.promises.writeFile(toFilename, buffer);
console.log('文件复制成功');
}
fileCopy('./data/pack.json', './data/pack.copy.json');
mkdir 创建目录
fs.promises.mkdir('./test');
unlink 删除文件
fs.promises.unlink(filename)
stat 读取文件状态信息
const fs = require('fs');
const path = require('path');
async function test () {
const filename = path.resolve(__dirname, './data');
const stat = await fs.promises.stat(filename);
console.log(stat);
console.log(stat.isDirectory()); //--> true 判断是否是目录
console.log(stat.isFile()); //--> false 判断是否是文件
}
test();
判断该文件或目录是否已经存在,没有则创建该文件或目录
const fs = require('fs');
const path = require('path');
async function exists (filename) {
const fileArr = filename.split(path.sep);
const endFile = fileArr[fileArr.length - 1];
// console.log(endFile)
try {
const stat = await fs.promises.stat(filename); // 查看文件状态,判断是否存在
return true;
} catch (err) {
if (err.code === 'EEXIST') { // 目录或文件已存在
return;
} else if (err.code === 'ENOENT') { // 文件不存在则创建该文件
if (endFile.includes('.') === true) { // 判断传入路径是否带有后缀名
await fs.promises.writeFile(filename, '');
} else {
await fs.promises.mkdir(filename);
}
return false;
}
throw err;
}
}
async function test () {
const filename = path.resolve(__dirname, './data/1txt');
const bool = await exists(filename);
console.log(bool);
}
test();
获取文件夹下的内容
const fs = require('fs');
const path = require('path');
class File {
constructor (filename, name, ext, isFile, size, createTime, updataTime) {
this.filename = filename;
this.name = name;
this.ext = ext;
this.isFile = isFile;
this.size = size;
this.createTime = createTime;
this.updataTime = updataTime
}
// 获取文件内容
async getContent (isBuffer = false) {
if (this.isFile) {
if (isBuffer) {
return await fs.promises.readFile(this.filename);
} else {
return await fs.promises.readFile(this.filename, 'utf-8');
}
} else {
return null;
}
}
// 获取文件夹下的文件所有属性,返回一个数组
async getChildren () {
if (this.isFile) {
return [];
}
let children = await fs.promises.readdir(this.filename);
children = children.map(name => {
const result = path.resolve(this.filename, name);
return File.getFile(result);
});
return Promise.all(children);
}
// 获取文件属性
static async getFile(filename) {
const stat = await fs.promises.stat(filename);
const name = path.basename(filename);
const ext = path.extname(filename);
const isFile = stat.isFile();
const size = stat.size;
const createTime = stat.birthtime;
const updataTime = stat.mtime;
return new File(filename, name, ext, isFile, size, createTime, updataTime);
}
}
async function readDir (dirname) {
const file = await File.getFile(dirname);
return await file.getChildren();
}
// 获取一个文件夹下文件内容的字节数之和
async function getByteNum () {
const filename = await path.resolve(__dirname, './data');
const file = await File.getFile(filename);
// console.log(file);
// console.log(await file.getContent(true));
// console.log(await readDir(filename));
const arr = await readDir(filename);
let byteNum = 0;
await arr.forEach((val, i) => {
byteNum += val.size;
});
console.log(byteNum);
}
getByteNum();